package cmctx

import (
	"fmt"

	"github.com/gin-gonic/gin"

	"mychat/internal/common/errors"
)

func SetGtxLogEntry(gtx *gin.Context, logEntry map[string]any) {
	gtx.Set(ctxLogEntry, logEntry)
}

func GetGtxLogEntry(gtx *gin.Context) map[string]any {
	v, ok := gtx.Get(ctxLogEntry)
	if !ok {
		return nil
	}
	if logEntry, ok := v.(map[string]any); ok {
		return logEntry
	}
	return nil
}

func ReplyJsonAPIError(gtx *gin.Context, e *errors.Error) {
	gtx.AbortWithStatusJSON(int(e.StatusCode), e)
	return
}

func SetGtxRequestId(gtx *gin.Context, requestId string) {
	gtx.Set(ctxRequestId, requestId)
}

func GetGtxRequestId(gtx *gin.Context) string {
	requestId, exists := gtx.Get(ctxRequestId)
	if exists {
		return requestId.(string)
	}
	return ""
}

func SetGtxUserId(gtx *gin.Context, userId uint) {
	gtx.Set(ctxUserId, userId)
}

func GetGtxUserId(gtx *gin.Context) uint {
	userId, exists := gtx.Get(ctxUserId)
	if exists {
		return userId.(uint)
	}
	return 0
}

func FormatGtxRequestId(ctx *gin.Context) string {
	return fmt.Sprintf("%s#%s", ctxRequestId, GetGtxRequestId(ctx))
}
